/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia.daos;

import Persistencia.CRUD;
import Persistencia.DAO;
import Persistencia.SeqHelper;
import Persistencia.modelos.Tecnico;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author HP
 */
public class TecnicoDAO implements DAO<Integer, Tecnico> {

    public void salva(Tecnico obj) {
        int i = SeqHelper.getId("pessoa");
        CRUD.adiciona("pessoa", "idPessoa, "+ obj.getFieldsToInsertAsString(),  i + ", " + obj.getFieldContentToInsertAsString());                            
        CRUD.adiciona("tecnico", "idpessoa, estilo", i + ", '" + obj.getEstilo() + "'");           
        obj.setIdPessoa(i);        
    }

    public void atualiza(Tecnico obj) {
        List<String> c = new ArrayList<String>();        
        c.add("nomepessoa");
        c.add("datanascpessoa");
        c.add("salariopessoa");
        c.add("dataadmissao");
        List<String> a = new ArrayList<String>();
        a.add("'"+obj.getNomePessoa()+"'");
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        a.add("'"+sdf.format(obj.getDataAdmissao())+"'");
        a.add(String.valueOf(obj.getSalarioPessoa()));
        a.add("'"+sdf.format(obj.getDataNascPessoa())+"'");
        CRUD.atualiza("pessoa",c,a, " where idpessoa = " + obj.getIdPessoa());
        c.clear();
        a.clear();
        c.add("estilo");                
        a.add("'" + obj.getEstilo() + "'");
        CRUD.atualiza("tecnico", c, a, " where idpessoa = " + obj.getIdPessoa());
    }

    public void deleta(Integer obj) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(obj);
        CRUD.deleta("arbitro","idpessoa", list);
        CRUD.deleta("pessoa","idpessoa", list);
    }

    public Tecnico recupera(Integer obj) {
        try {                           
            ResultSet rs = CRUD.consulta("select * from pessoa p join Tecnico a on a.idpessoa = p.idpessoa where p.idpessoa = " + obj);        
            rs.next();
            Tecnico a = new Tecnico();
            a.setIdPessoa(rs.getInt("idpessoa"));
            a.setNomePessoa(rs.getString("nomepessoa"));
            a.setSalarioPessoa(rs.getLong("salarioPessoa"));
            a.setEstilo(rs.getString("estilo"));
            a.setDataNascPessoa(rs.getDate("datanascpessoa"));
            a.setDataAdmissao(rs.getDate("dataadmissao"));
            return a;
        } catch (SQLException ex) {
            throw  new RuntimeException(ex);
        }
    }

    public Collection<Tecnico> recuperaLista(Collection<Integer> chaves) {
             try {
            StringBuilder sb = new StringBuilder();
            Iterator<Integer> it = chaves.iterator();
            while (it.hasNext()){
                sb.append(it.next()).append(",");
            }
            String ids = sb.toString().substring(0, sb.toString().length()-1);
                        
            Collection<Tecnico> arbitros = new ArrayList<Tecnico>();               
            ResultSet rs = CRUD.consulta("select * from pessoa p join tecnico a on a.idpessoa = p.idpessoa and p.idpessoa in (" + ids + ")");                        
            while (rs.next()){
                Tecnico a = new Tecnico();
                a.setIdPessoa(rs.getInt("idpessoa"));
                a.setNomePessoa(rs.getString("nomepessoa"));
                a.setSalarioPessoa(rs.getLong("salarioPessoa"));
                a.setEstilo(rs.getString("estilo"));
                a.setDataNascPessoa(rs.getDate("datanascpessoa"));
                a.setDataAdmissao(rs.getDate("dataadmissao"));
                arbitros.add(a);
            }
            return arbitros;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }        
    }

    public Collection<Tecnico> recuperaTodos() {
        try {
            Collection<Tecnico> arbitros = new ArrayList<Tecnico>();               
            ResultSet rs = CRUD.consulta("select * from pessoa p join tecnico a on a.idpessoa = p.idpessoa");                        
            while (rs.next()){
                Tecnico a = new Tecnico();
                a.setIdPessoa(rs.getInt("idpessoa"));
                a.setNomePessoa(rs.getString("nomepessoa"));
                a.setSalarioPessoa(rs.getLong("salarioPessoa"));
                a.setEstilo(rs.getString("estilo"));
                a.setDataNascPessoa(rs.getDate("datanascpessoa"));
                a.setDataAdmissao(rs.getDate("dataadmissao"));
                arbitros.add(a);
            }
            return arbitros;
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }      
}
